#include <stdio.h>
#include <stdlib.h>
/*-----------------C->fopen->fwrite->fread->fclose->binary----------------*/
//int main()
//{
//  FILE* fp = fopen("./log.bin", "w");
//  if(fp == NULL)
//  {
//    perror("fopen:");
//    exit(1);
//  }
//
//  const char* arr = "sherry777";
//  fwrite(arr, sizeof(arr), 5, fp);
//
//  fclose(fp);
//  return 0;
//}

//int main()
//{
//  FILE* fp = fopen("./log.bin", "r");
//  if(fp == NULL)
//  {
//    perror("fopen:");
//    exit(1);
//  }
//
//  char arr[256];
//  fread(arr, sizeof(arr), 5, fp);
//  printf("%s\n", arr);
//  fclose(fp);
//  return 0;
//}
/*-----------------C->fopen->fprintf->fscanf->fclose->txt----------------*/
//int main()
//{
//  FILE* fp = fopen("./log.txt", "w");
//  if(fp == NULL)
//  {
//    perror("fopen:");
//    exit(1);
//  }
//
//  const char* arr = "sherry";
//  fprintf(fp, "%s", arr);
//
//  fclose(fp);
//  return 0;
//}

//int main()
//{
//  FILE* fp = fopen("./log.txt", "r");
//  if(fp == NULL)
//  {
//    perror("fopen:");
//    exit(1);
//  }
//
//  char arr[100] = "";
//  while(fscanf(fp, "%s", arr) != EOF)
//  {
//    printf("%s\n", arr);
//  }
//
//  fclose(fp);
//  return 0;
//}
/*-----------------C->fopen->fputs->fgets->fclose->txt----------------*/
//int main()
//{
//  FILE* fp = fopen("./log.t", "w");
//  if(fp == NULL)
//  {
//    perror("fopen:");
//    exit(1);
//  }
//
//  int cnt = 10;
//  const char* arr = "sherry_puts\n";
//  while(cnt--)
//  {
//    fputs(arr, fp);
//  }
//  fclose(fp);
//  return 0;
//}

//int main()
//{
//  FILE* fp = fopen("./log.t", "r");
//  if(fp == NULL)
//  {
//    perror("fopen:");
//    exit(1);
//  }
//
//  char arr_get[64];
//  while(fgets(arr_get, sizeof(arr_get), fp))
//  {
//    printf("%s", arr_get);
//  }
//  fclose(fp);
//  return 0;
//}
/*------------------stdin->stdout->stderr------------------------*/
//int main()
//{
//  //  const char* msg = "sherry\n";
//  // fputs(msg, stdout);
//  // fputs(msg, stderr);
//  char buffer[64];
//  while(fgets(buffer, sizeof(buffer), stdin))
//  {
//    printf("%s", buffer);
//  }
//  return 0;
//}
/*-------------------open->close------------------------------------*/
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
//int main()
//{
//  int fd = open("./log.txt", O_WRONLY | O_CREAT, 0644);
//  int fd2 = open("./log2.txt", O_WRONLY | O_CREAT, 0644);
//  int fd3 = open("./log3.txt", O_WRONLY | O_CREAT, 0644);
//  int fd4 = open("./log4.txt", O_WRONLY | O_CREAT, 0644);
//  if(fd < 0)
//  {
//    perror("open faild:");
//    exit(1);
//  }
//
//  printf("fd:%d\n", fd);
//  printf("fd:%d\n", fd2);
//  printf("fd:%d\n", fd3);
//  printf("fd:%d\n", fd4);
//  close(fd);
//  close(fd2);
//  close(fd3);
//  close(fd4);
//  return 0;
//}
/*--输出3 4 5 6--*/
/*-----------------------------------------------------------------------------------*/


/*------------------write-------------------------*/
//int main()
//{
//  int fd = open("./log.txt", O_CREAT | O_WRONLY, 0644);
//  if(fd < 0)
//  {
//    perror("open faild:");
//    exit(1);
//  }
//
//  const char* ptr = "sherry7\n";
//  int cnt = 5;
//  while(cnt--)
//  {
//    write(fd, ptr, strlen(ptr));
//  }
//
//  close(fd);
//  return 0;
//}
/*------------------read-------------------------*/
//int main()
//{
//  int fd = open("./log.txt", O_RDONLY);
//  if(fd < 0)
//  {
//    perror("open faild:");
//    exit(1);
//  }
//
//  char buffer[1024];
//  ssize_t s = read(fd, buffer, sizeof(buffer)-1);
//  if(s > 0)
//  {
//    buffer[s] = 0;
//    printf("%s", buffer);
//  }
//  
//  close(fd);
//  return 0;
//}

/*------------------直接向0/1/2中写入-------------------------*/
//int main()
//{
//  const char* buff_1 = "write -> 1\n";
//  const char* buff_2 = "write -> 2\n";
//  write(1,buff_1, strlen(buff_1));
//  write(1,buff_1, strlen(buff_1));
//  write(1,buff_1, strlen(buff_1));
//  write(2,buff_2, strlen(buff_2));
//  write(2,buff_2, strlen(buff_2));
//  write(2,buff_2, strlen(buff_2));
//  
//  char msg[1024];
//  ssize_t s = read(0, msg, sizeof(msg)-1);
//  msg[s-1] = 0;
//  printf("echo# %s\n", msg);
//
//  return 0;
//}
/*------------------文件描述符的分配规则-------------------------*/
//int main()
//{
//  close(0); 
//  // close(2);
//  int fd = open("./log.txt", O_WRONLY | O_TRUNC);
//  // int fd = open("./log.txt", O_RDONLY);
//  if(fd < 0)
//  {
//    perror("open");
//    exit(1);
//  }
//
//  const char* buffer = "sherry77\n";
//  write(fd, buffer, strlen(buffer));
//  printf("fd = %d\n", fd);
//
//  close(fd);
//  return 0;
//}
/*------------------输出重定向-------------------------*/
/*--输出重定向是把标准输出stdout关闭，printf/fprintf/fputs都是输出到fd==1的文件中--*/
//int main()
//{
//  close(1); 
//  int fd = open("./log.txt", O_CREAT | O_WRONLY, 0644);
//  if(fd < 0)
//  {
//    perror("open");
//    exit(1);
//  }
//  printf("fd = %d\n", fd);
//  
//  const char* buffer = "sherry77\n";
//  write(fd, buffer, strlen(buffer));
//  fprintf(stdout, "%s", buffer);
//  fputs(buffer, stdout);
//
//  return 0;
//}
/*------------------输入重定向-------------------------*/
/*--输入重定向是将标准输入关闭，fgets本应该从键盘读取数据，但是关闭fd = 0之后，再创建文件，该文件的fd为0，那么读取就是读取文件中的内容--*/
//int main()
//{
//  close(0);
//  int fd = open("./log.txt", O_RDONLY);
//  printf("fd = %d\n", fd);
//  // buff是定义的一个缓冲区，用于接受每次fgets读取的内容
//  char buff[128];
//  while(fgets(buff, sizeof(buff)-1, stdin))
//  {
//    printf("buff = %s", buff);
//  }
//}
/*------------------追加重定向-------------------------*/
/*--追加重定向和输出重定向类似，只是在打开的文件，添加追加关键字O_APPEND--*/
//int main()
//{
//  close(1); 
//  int fd = open("./log.txt", O_CREAT | O_WRONLY | O_APPEND, 0644);
//  if(fd < 0)
//  {
//    perror("open");
//    exit(1);
//  }
//
//  const char* buffer = "sherry77\n";
//  write(fd, buffer, strlen(buffer));
//  printf("fd = %d\n", fd);
//  fprintf(stdout, "%s", buffer);
//  //fputs(buffer, stdout);
//  fflush(stdout);
//  close(fd);
//  return 0;
//}
/*------------------验证FILE中的fd-------------------------*/
//int main()
//{
//  printf("stdin->%d\n", stdin->_fileno);
//  printf("stdout->%d\n", stdout->_fileno);
//  printf("stderr->%d\n", stderr->_fileno);
//  
//  FILE* fp = fopen("./log.txt", "r");
//  printf("log.txt->%d\n",fp->_fileno);
//
//  return 0;
//}
/*---------------------dup2--------------------------------*/
//#include <unistd.h>
/*--------输出重定向-------------*/
//int main()
//{
//  int fd = open("./log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0644);
//  if(fd < 0)
//  {
//    perror("open");
//    exit(1);
//  }
//
//  dup2(fd, 1);
//  const char* buff = "sherry\n";
//  int cnt = 2;
//  while(cnt--)
//  {
//    printf("kkkk\n");
//    fprintf(stdout,"%s", buff);
//    fputs(buff, stdout);
//  }
//  close(fd);
//
//  return 0;
//}

/*--------输入重定向--------------*/
//int main()
//{
//  int fd = open("./log.txt", O_RDONLY);
//  dup2(fd, 0);
//  char msg[128];
//  while(fgets(msg, sizeof(msg)-1, stdin))
//  {
//    printf("%s", msg);
//  }
//  close(fd);
//  return 0;
//}
/*---------------------------------------------------------*/










